/**
 * 文件管理相关api
 * @author xxl.nice@foxmal.com
 */
import { req } from '@/util/request'
import type { Page, PageOprion, ResData } from '@/types/index'
import type { FileTable, FileAuth } from '@/types/file'

/**
 * 获取文件列表
 * @param page
 * @param cdn
 * @returns
 */
export function getFileList(page: PageOprion, cdn: FileTable): ResData<Page<FileTable>> {
  return req.post('/file/list', {
    size: page.size,
    num: page.num,
    cdn
  })
}

/**
 * 扫描某个文件夹
 * @param id 文件夹id
 * @returns
 */
export function floderScan(id: number): ResData<any> {
  return req.get('/file/scan', {
    params: {
      id
    },
    timeout: 3600000
  })
}

/**
 * 新建文件或文件夹
 * @param parent 父文件夹
 * @param type 文件类型
 * @param file 文件
 * @returns
 */
export function addFile(
  parent: number,
  type: 'file' | 'dir',
  file?: File,
  name?: string
): ResData<any> {
  return req.postForm(
    '/file/add',
    {
      file
    },
    {
      params: {
        parent,
        type,
        name
      }
    }
  )
}

/**
 * 后台计算文件大小
 * @param fId 文件id
 * @returns
 */
export function getFileSize(fId: number): ResData<{ file: number; size: number }> {
  return req.get('/file/size', {
    params: {
      id: fId
    }
  })
}

/**
 * 删除文件
 * @param ids 文件id
 * @returns
 */
export function delFile(ids: number[]): ResData<any> {
  return req.delete('/file', {
    data: ids
  })
}

/**
 * 获取文件权限列表
 * @param id 文件id
 * @returns 权限列表
 */
export function getFileAuth(id: number): ResData<FileAuth[]> {
  return req.get('/file/auth', {
    params: {
      id
    }
  })
}

/**
 * 删除文件文件
 * @param id 文件id
 * @param aids 权限id列表
 * @returns
 */
export function delFileAuth(id: number, aids: number[]): ResData<any> {
  return req.delete('/file/auth', {
    data: aids,
    params: {
      id
    }
  })
}

/**
 * 给文件添加权限
 * @param id 文件id
 * @param auth 权限对象
 * @returns
 */
export function addFileAuth(id: number, auth: FileAuth) {
  return req.put('/file/auth', auth, {
    params: {
      id
    }
  })
}

/**
 * 更新文件权限
 * @param id 文件id
 * @param auth 权限对象
 * @returns
 */
export function updateFileAuth(id: number, auth: FileAuth): ResData<any> {
  return req.post('/file/auth', auth, {
    params: {
      id
    }
  })
}

/**
 * 更新文件继承状态
 * @param id 文件id
 * @param extend 是否继承
 * @returns
 */
export function changeFileExtend(id: number, extend: 'Y' | 'N'): ResData<any> {
  return req.get('/file/auth/change/extend', {
    params: {
      id,
      extend
    }
  })
}

/**
 * 获取某文件的 父文件列表
 * @param id 文件id
 * @returns 文件列表
 */
export function getFileParentsList(id: number): ResData<FileTable[]> {
  return req.get('/file/parents', {
    params: {
      id
    }
  })
}
